package com.jyw.router.hospital.domain;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jyw.router.common.annotation.Excel;
import com.jyw.router.common.utils.DateUtils;
import com.jyw.router.hospital.domain.vo.LoginMiniappVo;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.mp.bean.result.WxMpUser;

/**
 * 微信用户信息对象 r_wx_user
 * 
 * @author shenjun
 * @date 2023-04-19
 */
@Data
@TableName("r_wx_user")
@NoArgsConstructor
public class WxUser
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    @TableId(type = IdType.AUTO)
    private Long id;

    /** 开放平台唯一标识 */
    @Excel(name = "开放平台唯一标识")
    private String unionId;

    /** 公众号唯一标识 */
    @Excel(name = "公众号唯一标识")
    private String mpOpentId;

    /** 小程序唯一标识 */
    @Excel(name = "小程序唯一标识")
    private String miniappOpenId;

    /** 是否关注公众号 0未关注 1已关注 */
    @Excel(name = "是否关注公众号 0未关注 1已关注")
    private Integer subscribe;

    /** 绑定手机号 */
    @Excel(name = "绑定手机号")
    private String phone;

    /** 头像 */
    @Excel(name = "头像")
    private String headPortrait;

    /** 关注时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createTime;

    /** 最后一次登录时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updateTime;

    /** 关注时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "关注时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date subscribeTime;

    /** 最后一次登录时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "最后一次登录时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date lastLoginTime;
    /**
     * 最后一次登录token
     */
    private String token;
    /**
     * 最后一次登录的医院ID
     */
    private Long lastLoginHospitalId;

    public WxUser(WxMpUser wxMpUser) {
        setUnionId(wxMpUser.getUnionId());
        setMpOpentId(wxMpUser.getOpenId());
        setSubscribe(1);
        setCreateTime(DateUtils.getNowDate());
        setSubscribeTime(DateUtils.getNowDate());
    }

    /**
     * 设置公众号信息
     */
    public void setMpInfo(WxMpUser wxMpUser){
        setUnionId(wxMpUser.getUnionId());
        setMpOpentId(wxMpUser.getOpenId());
        setSubscribe(1);
        setUpdateTime(DateUtils.getNowDate());
        setSubscribeTime(DateUtils.getNowDate());
    }

    /**
     * 设置小程序信息
     * @param loginVO
     */
    public void setMiniInfo(LoginMiniappVo loginVO) {
        setPhone(loginVO.getPhone());
        setMiniappOpenId(loginVO.getOpenId());
        setUpdateTime(DateUtils.getNowDate());
    }

    public void unsubscribe() {
        setSubscribe(0);
        setUpdateTime(DateUtils.getNowDate());
    }
}
